/**
 * 是否数组
 * @param {Object} value
 */
export function isArray(value) {
  if (typeof Array.isArray === 'function') {
    return Array.isArray(value)
  }
  return Object.prototype.toString.call(value) === '[object Array]'
}

/**
 * 是否对象
 * @param {Object} value
 */
export function isObject(val) {
  return val !== null && typeof val === 'object'
}

/**
 * @description 深度克隆
 * @param {object} obj 需要深度克隆的对象
 * @param {Boolean} isCopyValue 是否只复制值
 * @returns {*} 克隆后的对象或者原值（不是对象）
 */
export function deepClone(obj, isCopyValue = true) {
  // 对常见的“非”值，直接返回原来值
  if ([null, undefined, NaN, false].includes(obj)) return obj
  if (typeof obj !== 'object' && typeof obj !== 'function') {
    // 原始类型直接返回
    return obj
  }
  if (isCopyValue) {
    const newObj = JSON.parse(JSON.stringify(obj))
    if (isArray(obj)) {
      return Object.values(newObj)
    }
    return newObj
  }
  const o = isArray(obj) ? [] : {}
  for (const i in obj) {
    if (obj.hasOwnProperty(i)) {
      o[i] = typeof obj[i] === 'object' ? deepClone(obj[i], false) : obj[i]
    }
  }
  return o
}

/**
 * 判断是否为空
 */
export function isEmpty(value) {
  switch (typeof value) {
    case 'undefined':
      return true
    case 'string':
      if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
      break
    case 'boolean':
      if (!value) return true
      break
    case 'number':
      if (value === 0 || isNaN(value)) return true
      break
    case 'object':
      if (value === null || value.length === 0) return true
      for (const i in value) {
        return false
      }
      return true
  }
  return false
}

export function getQueryObjByStr(str) {
  if (!str) {
    return {}
  }
  const arr = str.split("&")
  let obj = {},
    arr2 = []
  for (let i = 0; i < arr.length; i++) {
    arr2 = arr[i].split('=')
    if (arr2.length != 2) {
      continue
    }
    obj[arr2[0]] = arr2[1]
    arr2 = []
  }
  return obj
}


/**
 * 二维数组 转 对象
 * @param {Array} arr
 * @param {String} key
 * @param item
 * @param isGetIndex
 */
export const arrayToObjByKey = (arr, key, item = null, isGetIndex = false) => {
  let obj = {};
  for (let i in arr) {
    if (arr[i][key] === undefined) {
      continue
    }
    if (item !== null) {
      obj[arr[i][key]] = item;
      continue
    }
    if (isGetIndex) {
      obj[arr[i][key]] = i;
      continue
    }
    obj[arr[i][key]] = arr[i];
    continue
  }
  return obj;
}

/**
 * 获取meta环境变量
 * @returns {ImportMetaEnv|{}}
 */
export const getMetaEnv = () => {
  try {
    return import.meta.env
  } catch (error) {
    console.log('getMetaEnv error', error)
    return {}
  }
}

/**
 * 获取文件访问地址
 * @param fileUrl 文件访问地址
 * @param isOrigin
 * @returns {string}
 */
export const getFileAccessHttpUrl = (fileUrl = '', isOrigin = false) => {
  if (isEmpty(fileUrl)) {
    return ''
  }
  fileUrl = String(fileUrl)
  // 判断是否是base64图片
  if (fileUrl.startsWith('data:')) {
    return fileUrl
  }
  
  if (fileUrl.startsWith('http')) {
    return fileUrl
  }
  const env = getMetaEnv()
  let newUrl =  (env?.VITE_APP_BASE_RESORCEAPI || '') + fileUrl;
  if (!isOrigin) {
    return newUrl
  }
  if (newUrl.startsWith('http')) {
    return newUrl;
  }
  const origin = window.location.origin
  return `${origin}${newUrl}`
}


export const getOtherQuery = () => {
  let url = location.href.split('#')[0] ?? ''
  console.log('url -> location', url)
  url = url.split('?')[1] ?? ''
  console.log('url -> ?', url)
  return getQueryObjByStr(decodeURIComponent(url))
}
